package Java8实战._3_Stream_用流收集数据._3_分组;

import Java8实战._3_Stream_用流收集数据.Dish;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;


public class _0_分组 {

    public static void main(String[] args) {
        List<Dish> menu = Arrays.asList(
                new Dish("pork",false,800, Dish.Type.MEAT),
                new Dish("beef",false,700, Dish.Type.MEAT),
                new Dish("chicken", false, 400, Dish.Type.MEAT),
                new Dish("french fries", true, 530, Dish.Type.OTHER),
                new Dish("rice", true, 350, Dish.Type.OTHER),
                new Dish("season fruit", true, 120, Dish.Type.OTHER),
                new Dish("pizza", true, 550, Dish.Type.OTHER),
                new Dish("prawns", false, 300, Dish.Type.FISH),
                new Dish("salmon", false, 450, Dish.Type.FISH)
        );

        Map<Dish.Type, List<Dish>> dishMap = menu.stream()
                .collect(Collectors.groupingBy(Dish::getType));

        for (Map.Entry<Dish.Type,List<Dish>> map : dishMap.entrySet()){
            System.out.println(map.getKey() + "===============");
            map.getValue().stream()
                    .forEach(dish -> System.out.println("菜品名称：" + dish.getName() + ",热量：" + dish.getCalories()));
        }

        System.out.println("\n\n============最美分割线===================\n\n");

        Map<Dish.CaloricLevel, List<Dish>> caloricLevelListMap = menu.stream()
                .collect(Collectors.groupingBy(
                        dish -> {
                            if (dish.getCalories() > 700) {
                                return Dish.CaloricLevel.FAT;
                            } else if (dish.getCalories() > 400) {
                                return Dish.CaloricLevel.NORMAL;
                            } else {
                                return Dish.CaloricLevel.DIET;
                            }
                        }
                ));

        for (Map.Entry<Dish.CaloricLevel,List<Dish>> map : caloricLevelListMap.entrySet()){
            System.out.println(map.getKey() + "=====================");
            map.getValue().stream()
                    .forEach(dish -> System.out.println("菜品名称：" + dish.getName() + ",热量：" + dish.getCalories()));
        }




    }
}
